import axios from 'axios'
import { ElMessage } from 'element-plus'

// 请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    return config;
  }, function (error) {
    // 对请求错误做些什么
	ElMessage.error('请求失败')
    return Promise.reject(error);
  });

// 响应拦截器
axios.interceptors.response.use(
    response => {
        // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据
        // 否则的话抛出错误
        if (response.status === 200) {
            return Promise.resolve(response);
        } else {
            return Promise.reject(response);
        }
    },
    // 服务器状态码不是2开头的的情况
    // 这里可以跟你们的后台开发人员协商好统一的错误状态码
    // 然后根据返回的状态码进行一些操作，例如登录过期提示，错误提示等等
    // 下面列举几个常见的操作，其他需求可自行扩展
    error => {
        if (error.response) {
            switch (error.response.status) {
                // 404请求不存在
                case 404:
                    Toast({
                        message: '网络请求不存在',
                        duration: 1500,
                        forbidClick: true
                    });
                    break;
                // 其他错误，直接抛出错误提示
                default:
                    Toast({
                        message: error.response.data.message,
                        duration: 1500,
                        forbidClick: true
                    });
            }
            return Promise.reject(error.response);
        } else {
			ElMessage.error('请求失败')
			return Promise.reject(error.response);
		}
    }
)

//设备连接
export function connectApi(deviceList) {
	return axios({
	  method: 'post',
	  url: 'http://localhost:3001/api/device/connect',
	  data: deviceList
	})
}

//设备断开连接
export function disconnectApi(deviceList) {
	axios({
	  method: 'post',
	  url: 'http://localhost:3001/api/device/disconnect',
	  data: deviceList
	})
}

//查询设备连接状态
export function queryStatusApi(deviceList) {
	return axios({
	  method: 'post',
	  url: 'http://localhost:3001/api/device/connect/query',
	  data: deviceList
	})
}

//上报通用事件
export function reportGeneralEventApi(deviceList, eventName, eventData, wsClientId) {
	return axios({
	  method: 'post',
	  url: 'http://localhost:3001/api/device/reportGeneralEvent',
	  data: {
		  deviceList: deviceList,
		  eventName: eventName,
		  eventData: eventData,
		  wsClientId: wsClientId
	  }
	})
}

//测试数据库连接
export function checkDbConnApi(dbSetting) {
	return axios({
	  method: 'post',
	  url: 'http://localhost:3001/api/db/checkConn',
	  data: dbSetting
	})
}

//查询设备列表
export function queryDeviceApi(dbConfig, param) {
	return axios({
	  method: 'post',
	  url: 'http://localhost:3001/api/db/queryDevice',
	  data: {dbConfig, param}
	})
}
